/**
  * 活动相关接口，原为2023年十月活动相关接口，后复用于2024年五一活动
  * @author: Ruan Jiazhen
  * @date: 2024-04-29 09:17:32
* */
// XXX 将该文件中的接口合并到api-activity.ts中，并删除该文件

import { reqGet, reqPost } from './request';

/** 获取用户基本信息 */
export const reqGetPersonInfo202310 = () => reqGet<{
  activityInfo : {
    /** 头像 */
    avator : string;
    /** 昵称 */
    emcee_name : string;
    id : string;
    invite_key : string;
    phonenumber : string;
    /** 所属团队ID */
    teamId : string;
    /** 给团队贡献的积分 */
    teamScore : number;
    userId : string;
    wx_openid_activity : string;
    teamInfo : {
      icon : string;
      is_delete : string;
      score : number;
      teamId : string;
      title : string;
      type : string;
      userId : string;
    };
    token : string;
  }
}>('/activityOctober2023/getOctoberLoginInfo');

/** 获取个人排行榜相关信息 */
export const reqGet202310PersonalRankInfo = () => reqGet<ReqGet202310PersonalRankInfoData>('/activityOctober2023/getMyInfo');

/** 积分变动情况 */
type ScoreChangeInfo = {
  /**
     * 已获得积分数
     */
  change_dou : number;
  /**
     * 完成任务数量
     */
  size : number;
}

/** 获取个人巅峰赛今天、本周积分变动情况 */
export const reqGetPersonalRankScoreChangeInfo = () => reqGet<{
  today : ScoreChangeInfo,
  weed : ScoreChangeInfo
}>('/activityOctober2023/miaoDouInfo');

/** 获取团队邀请赛相关信息 */
export const reqGet202310TeamInviteCompetitionInfo = () => reqGet<{
  /** 0 没有加入团队 1加入团队了 */
  isAddTeam : string;
  /**
     * 距离上一名差的分数
     */
  distance_score : number;
  /**
     * 我的团队排名
     */
  myTeamRank : string;
  teamInfo : {
    icon : string;
    is_delete : string;
    score : number;
    teamId : string;
    title : string;
    type : string;
    userId : string;
    auth_status: '0' | '1';
  };
  list : Array<{
    awardName : Array<{
      icon ?: string;
      title : string;
    }>;
    /** 图标 */
    icon : string;
    is_delete : string;
    /** 排名 */
    rank : string;
    /** 团队分数 */
    score : number;
    /** 团队ID */
    teamId : string;
    auth_status: '0' | '1';
    /** 团队名称 */
    title : string;
    type : string;
    userId : string;
  }>;
  taskAppList: Array<{
    score: string;
    type: 'loginHaimiao' | 'publishWorks' | 'publishCircle' | 'createSchedule';
    title: string;
  }>
}
>('/activityOctober2023/getMyTeamInfo');

/** 获取团队今日积分、本周积分、团队成员信息 */
export const reqGetTeamInviteCompetitionScoreChangeInfo = () => reqGet<{
  /** 团队成员列表 */
  teamMemberList : Array<{
    /** 头像 */
    avator : string;
    /** 昵称 */
    emcee_name : string;
    /** 用户id */
    id : string;
    /** 团队id */
    teamId : string;
    /** 积分 */
    teamScore : number;
  }>;
  today : ScoreChangeInfo,
  weed : ScoreChangeInfo
}>('/activityOctober2023/getTeamInfo2');

/** 获取自己的团队签到状态 */
export const reqGetTeamCheckInStatus = () => reqGet<{ signInStatus : '0' | '1' }>('/activityOctober2023/getSignInStatus');

/** 团队签到 */
export const reqTeamCheckIn = () => reqGet('/activityOctober2023/teamSignIn');

/** 创建团队
 * @param teamName 团队名称
 * @param teamAvatar 团队头像
 */
export const reqCreateTeam = (teamName : string, teamAvatar : string) => reqGet('/activityOctober2023/createTeam', {
  title: teamName,
  icon: teamAvatar,
});

/**
 * 加入团队
 * @param teamId 团队id
 */
export const reqJoinTeam = (teamId : string) => reqGet<{
  /**
     * 200 成功 201 已经拥有团队  202  团队不存在  203 团队已经满员
     */
  code : 200 | 201 | 202 | 203;
  msg : string;
}>('/activityOctober2023/joinTeam', { teamId });

/** 退出团队 */
export const reqQuitTeam = () => reqGet<{
  /** 200 成功  201 积分大于0不能退出  202 团长不能退出 */
  code : 200 | 201 | 202;
  msg : string;
}>('/activityOctober2023/exitTeam');

/**
 * 将一个团队成员踢出
 * @param kickUserId 被踢出的用户id
 */
export const reqKickOutTeamMember = (kickUserId : string) => reqGet<{
  /**
     * 200成功
     * 201团队积分大于0不可以离开
     * 203 不能踢出自己
     * 204 您不是团长，不能踢人
     */
  code : 200 | 201 | 203 | 204;
  msg : string;
}>('/activityOctober2023/kickTeam', { kickUserId });

/** 获取个人巅峰赛积分明细
 * @param page 页码
 * @param showCount 每页数量
 */
export const reqGetPersonalPeakCompetitionScoreDetail = (
  page : number,
  showCount : number,
) => reqGet<{
  list : Array<{
    change_dou : number;
    kind : string;
    label ?: string;
    miao_dou ?: number;
    send_time : string;
    title : string;
    type : string;
    userId : string;
  }>
  totalPage : number;
  totalResult : number;
}>('/activityMay2023/miaoDouList', {
  currentPage: page,
  showCount,
});

/** 获取团队邀请赛积分明细
 * @param page 页码
 * @param showCount 每页数量
 */
export const reqGetTeamInviteCompetitionScoreDetail = (
  page : number,
  showCount : number,
) => reqGet<{
  list : Array<{
    /** 头像 */
    avator : string;
    /** 改变的积分 */
    change_dou : number;
    /** 昵称 */
    emcee_name : string;
    /** 1 代表 加 2 代表 减 */
    kind : string;
    /** 标签  灰色文字 */
    label ?: string;
    miao_dou ?: number;
    /** 时间 */
    send_time : string;
    teamId : string;
    /** 标题 */
    title : string;
    /** 类型 */
    type : string;
  }>;
  totalPage : number;
  totalResult : number;
}>('/activityOctober2023/miaoDouTeamList', {
  currentPage: page,
  showCount,
});

/** 编辑团队头像、昵称
 * @param teamName 团队名称
 * @param teamAvatar 团队头像
 */
export const reqEditTeamInfo = (data : { teamName ?: string, teamAvatar ?: string }) => {
  let params = {};
  if (data.teamName) {
    params = {
      ...params,
      name: data.teamName,
    };
  }

  if (data.teamAvatar) {
    params = {
      ...params,
      avatar: data.teamAvatar,
    };
  }

  return reqPost<{ [key : string] : any }>('/activityOctober2023/updateTeam', params);
};

/** 记录邀请
 * @param inviteKey 邀请码
 */
export const reqRecordInvite = (inviteKey : string) => reqGet<{
  code : '200';
}>('/activityOctober2023/saveInviter', { invite_key: inviteKey });

/** 获取两个排行榜页面的广播内容 */
export const reqGetRankingListBroadcast = () => reqGet<{
  personalPeakCompetitionBroadcastList : Array<{
    avatar : string;
    content : string | DanmuContent
  }>
  teamInviteCompetitionBroadcastList : Array<{
    avatar : string;
    name : string;
    score : string;
  }>
}>('/activityOctober2023/getBroadcastList');

// 202505抢红包
export const reqGetLuckyMoneyInfo = () => reqGet<{
  need_wait_second: number;
  hb_can_rob_time: string;
  time_for_one_num: number;
  hbId: string;
  status: string;
  activity_start_time:string;
}>('/luckyMoney/getLuckyMoneyInfo');

export const reqGetRobLuckyMoney = (hbId:string) => reqGet<{
  status: string;
  rob_money: string;
}>('/luckyMoney/robLuckyMoney', { hbId });

export const reqGetLotteryInfo = () => reqGet<any>('/luckyMoney/getLotteryInfo');
export const reqPersonCheckIn = () => reqGet('/activityOctober2023/personSign');
export const reqGetPersonSignInStatus = () => reqGet<any>('/activityOctober2023/getPersonSignInStatus');
